$(document).ready(function () {
    /*
     * Проверка значений, вводимых в форму добавления лекарства.
     */
    $('#addform').validate({ // initialize the plugin
        rules: {
            name: {
                required: true,
                minlength: 2
            },
            substance: {
                required: true,
                minlength: 2
            },
            farmaaction: {
                required: true,
                minlength: 2
            },
            usefulmonth: {
                required: true,
                digits: true
            },
            salesterms: {
                required: true,
                minlength: 2
            },
            rub: {
                required: true,
                digits: true
            },
            cop: {
                required: true,
                max: 99,
                digits: true
            }
        }
    });

    /*
     * Заполнение select данными из БД
     */
    $.ajax({
        url: 'ajax.do',
        data: 'query=getAllContraIndications',
        dataType: 'json',
        success: function(contraindications){
            //Очистка старых значений
            $('.contraindication').find('option').remove()
                .end()  //возврат к предыдущему объекту
                .append($('<option></option>').val("").text("Выберите"));
            //Добавление новых
            $.each(contraindications, function (index, contra) {
                ($('.contraindication')).append(
                    $('<option></option>').val(contra.id).text(contra.name + " #" + contra.id));

            });
        },
        error: function (xhr) {
            alert(xhr.responseText);
        }
    });
    /*
     * Добавление поддержки автозаполнения
     */
    $(".drugNameInput").autocomplete(autocomp_opt);
});

/**
 * Опции для поддержки автозаполнения input-форм для лекарств
 */
var autocomp_opt = {
    minLength: 2,
    source: function (request, response) {
        var searchParam = request.term;
        $.ajax({
            url: 'ajax.do',
            data: 'query=searchDrugs&name=' + searchParam,
            dataType: 'json',
            success: function (data) {
                response($.map(data, function (item) {
                    return {
                        label: item.drugName + ' #' + item.id,
                        value: item.drugName + ' #' + item.id,
                        id: item.id
                    };
                }));
            },
            error: function (xhr) {
                alert(xhr.responseText);
            }
        });
    },
    //Принудительный выбор из предложенных элементов
    change: function (event, ui) {
        if (ui.item == null || ui.item == undefined) {
            $(this).val("");
            $(this).next().val("");
        } else {
            $(this).next().val(ui.item.id);
        }
    }
}

var countOfFields = 1; // Текущее число дополнительных полей
var curFieldNameId = 0; // Уникальное значение для атрибута name
var maxFieldLimit = 3*20; // Максимальное число возможных полей

/**
 * Добавления дополнительной формы для ввода нескольких
 * аналогов, несовеместимых лекарств и т.п.
 * Добавляется элемент вида <div> [форма для ввода (в зависимости от type)] [кнопка удаления] </div>
 * Имя новой формы:  namePrefix+ID (ID - генерируется автоматически)
 *
 * @param ptr - указатель (кнопка добавить)
 * @param namePrefix - начальное имя нового элемента
 * @param type  - тип элемента (input, select)
 */
function addForm(ptr, namePrefix, type) {
    var parent = ptr.parentNode;
    var divGroup = $(parent).children('div:first');
    // Проверяем, не достигло ли число полей максимума
    if (countOfFields >= maxFieldLimit) {
        alert("Число полей достигло своего максимума = " + maxFieldLimit);
        return false;
    }
    // Увеличиваем текущее значение числа полей
    countOfFields++;
    // Увеличиваем ID
    curFieldNameId++;

    //Добавляем новый div
    $(divGroup).append('<div></div>');
    //Кнопка удаления
    var deleteBtn = $('<a style=\"color:red;\" title="Удалить" onclick=\"return deleteForm(this)\" href=\"#\">[x]</a> ');

    switch (type) {
        case "input":
            var nameInput = $(divGroup).children('div:first').children('input:first').clone().autocomplete(autocomp_opt);
            nameInput.val("");
            var idInput = $('<input type="hidden" readonly="readonly">')
                .attr('name', namePrefix + curFieldNameId);
            //Добавляем в последний созданный div элементы
            $(divGroup).children('div:last').append(nameInput).append(idInput).append(deleteBtn);
            break;
        case "select":
            //Клонируем select
            var cloneSelect = $(divGroup).children('div:first').children('select:first').clone()
                .attr('name', namePrefix + curFieldNameId);
            //Добавляем в последний созданный div элементы
            $(divGroup).children('div:last').append(cloneSelect).append(deleteBtn);
            break;
    }
    // Возвращаем false, чтобы не было перехода по сслыке
    return false;
}

/**
 * Удаление созданного дополнительного поля -
 *  элемента вида <div> ... [кнопка удаления] </div>
 *
 * @param ptr - указатель (this)
 *
 */
function deleteForm(ptr) {
    if (countOfFields > 1) {
        // Получаем доступ к ДИВу, содержащему поле
        var removeDiv = ptr.parentNode;
        // Удаляем этот ДИВ из DOM-дерева
        removeDiv.parentNode.removeChild(removeDiv);
        // Уменьшаем значение текущего числа полей
        countOfFields--;
    }
    // Возвращаем false, чтобы не было перехода по сслыке
    return false;
}


